/* 
 * File:   StackTabWidget.h
 * Author: Gab'z
 *
 * Created on 10 juin 2012, 12:44
 */

#ifndef STACKTABWIDGET_H
#define	STACKTABWIDGET_H

#include <QtGui> 
#include "../log/LogSystem.h"
#include "../model/command/literal/Stack.h"
#include "../tool/Observer.h"

namespace calculator {

    /**
     * Elément du TabWidget spécialisé pour afficher les Stack.
     * Utilise le Design Pattern Observer pour se maintenir à jour.
     */
    class StackTabWidget : public QWidget, public Observer {
    public:

        /**
         * Constructeur de StackTabWidget.
         * Ajoute un observateur à la Stack associée à ce widget.
         * @param stack la stack associée à ce widget.
         * @param parent le widget parent.
         */
        StackTabWidget(Stack * const stack, QWidget* parent = 0);

        /**
         * Destrcuteur de StackTabWidget.
         * retire l'observateur de la Stack associée.
         */
        virtual ~StackTabWidget();
        
        /**
         * Recharge le contenu affiché à partir de la Stack.
         */
        void reloadTabContent();
        
        /**
         * Entraine le rechargement de l'affichage de la pile.
         */
        void updateObserver();

    private:
        
        /**
         * Pointeur vers la Stack associée.
         */
        Stack * _stack;
        
        /**
         * Le texte affichée correspondant à une Stack.
         */
        QTextEdit * _text;
        
        static Logger* log;
    };
}

#endif	/* STACKTABWIDGET_H */

